package main

import (
	"fmt"
	"sync"
	"time"
)

func routinefunction(wg *sync.WaitGroup) {
	wg.Add(1) //WaitGroup 中添加计数，这个计数代表着需要等待完成的 goroutine 数量
	time.Sleep(100 * time.Millisecond)
	fmt.Println("routine function")
	defer wg.Done() //标记一个相关的 goroutine 完成了它的工作。它本质上是对 WaitGroup 内部计数器减 1
}
func main() {
	wg := sync.WaitGroup{}
	for i := 0; i < 100; i++ {
		go routinefunction(&wg)
	}
	wg.Wait() //Wait() 方法会阻塞调用它的 goroutine，直到 sync.WaitGroup 的内部计数器变为 0
	fmt.Println("done")
	time.Sleep(5 * time.Second)
}
